home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Scene 96
/
Scene 96 International Edition (Zyklop Software) (Disc 2) (1997).iso
/
misc
/
coding
/
kmagv3
/
anim.c
next >
Wrap
C/C++ Source or Header
|
1996-01-11
|
4KB
|
121 lines
//ANIMEXAM.C / EXAMPLE FOR SIMPLE ANIMATION //
//WRITING BY THE KING IN 01/02/96 //
#include "kmagunit.c"
#include <alloc.h>
#include <stdlib.h>
//This is the IMAGE "HELLO" That I Type on the screen.
const char Image[24*5] =
{15,0,0,15,0,15,15,15,15,0,15,0,0,0,0,15,0,0,0,0,15,15,15,15,
15,0,0,15,0,15,0,0,0,0,15,0,0,0,0,15,0,0,0,0,15,0,0,15,
15,15,15,15,0,15,15,15,15,0,15,0,0,0,0,15,0,0,0,0,15,0,0,15,
15,0,0,15,0,15,0,0,0,0,15,0,0,0,0,15,0,0,0,0,15,0,0,15,
15,0,0,15,0,15,15,15,15,0,15,15,15,15,0,15,15,15,15,0,15,15,15,15};
unsigned char *virtualscreen;
unsigned char *virtualscreen1;
//------------------------------------------------//
//Put A Pixel On Any Kind Of Page. //
//------------------------------------------------//
void PutPixel1(int X,int Y,unsigned char Col,unsigned char *Where)
{
asm {
LEs Di,Where
Mov Ax,Y //Ax = Y
Mov Bx,Ax //Bx = Y
Shl Ax,8 //Ax = Ax * 256
Shl Bx,6 //Bx = Bx * 64
Add Ax,Bx //Ax = (256*64=320))
Add Ax,X //Ax = Vline + Hline = Offset
Add Di,Ax //Di = Offset
Mov Al,Col //Al = Color
StoSb //[0A000h:Offset] = Color
}
}
void ShowVirtualScreen(unsigned char *VScreen)
{
asm {
Push Ds //Saving Ds
lds si,VScreen
// Mov Ax,Word(VScreen+2) //Ax = Segment Vscreen
// Mov Ds,Ax //Ds = Ax
Mov Ax,0xA000 //Ax = Screen Segment
Mov Es,AX //Es = Ax
Xor Di,Di //Di = 0
// Xor Si,Si //Si = 0
Mov Cx,32000 //Cx = 32000
Rep MovSw //Move 32000*2 Bytes
//From [Ds:Si],[Es:Di]
Pop Ds //Restore Ds
}
}
//-----------------------------------//
// Flip Pages //
//-----------------------------------//
void FlipScreens(unsigned char *Vfrom,unsigned char *Vto)
{
asm {
Push Ds //Save Ds
Lds si,Vfrom //Ax = Segment Vfrom
Les di,Vto //Ax = Segment Vto
Mov Cx,32000 //Cx = 32000
Rep MovSw //Move 32000*2 Bytes
//From [Ds:Si],[Es:Di]
Pop Ds //Restore Ds
}
}
//----------------//
//Paint The BitMap//
//----------------//
void Paint_BitMap(int X,int Y)
{
char T,T1;
for(T=0;T<5;T++) {
for(T1=0;T1<24;T1++) {
if (Image[T*24+T1] != 0) {
PutPixel1(X+T1,Y+T,Image[T*24+T1],virtualscreen);
}
}
}
}
void main() {
int x,y;
unsigned int t;
int ran;
virtualscreen = (char *)malloc(64000);
virtualscreen1 = (char *)malloc(64000);
randomize();
memset(virtualscreen,0,64000);
for(t=0;t<65000;t++)
PutPixel1(rand() % 320,rand() % 200,rand() % 255,virtualscreen);
FlipScreens(virtualscreen,virtualscreen1);
SetMode();
t = 0;
x = 160;
y = 100;
do {
ran = (rand() % 3) - 1;
if (x + ran >= 320 - 24) ran = 0;
if (x + ran <= 0) ran = 0;
x = x + ran;
ran = (rand() % 3) - 1;
if (y + ran >= 200 - 5) ran = 0;
if (y + ran <= 0) ran = 0;
y = y + ran;
Paint_BitMap(x,y);
ShowVirtualScreen(virtualscreen);
FlipScreens(virtualscreen1,virtualscreen);
} while (!kbhit());
free(virtualscreen);
free(virtualscreen1);
}